package com.edu.proxy.dynamicproxy;

import java.lang.reflect.Method;
import java.lang.reflect.InvocationHandler;

/**
 * 代理处理器(ProxyHandler):
 * 
 * @author wangjunjie
 * 
 */
public class DynamicSubject implements InvocationHandler {
	private Object sub;

	public DynamicSubject() {
	}

	public DynamicSubject(Object obj) {
		sub = obj;
	}

	/**
	 * 该方法负责集中处理动态代理类上的所有方法调用。
	 * 第一个参数既是代理类实例，
	 * 第二个参数是被调用的方法对象
	 * 第三个方法是调用参数。
	 * 调用处理器根据这三个参数进行预处理或分派到委托类实例上发射执行
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println(" before calling " + method);
		method.invoke(sub, args);

		System.out.println(" after calling " + method);
		return null;
	}

}
